﻿using System;
using System.Collections.Generic;
using System.IO;

namespace LibraryGuard.Interfaces.Configuration
{
	/// <summary>
	/// Application running mode.
	/// </summary>
	public enum Mode
	{
		/// <summary>
		/// Normal mode - execute all actions.
		/// </summary>
		Normal,

		/// <summary>
		/// Interactive mode - ask for permission to execute every edge action.
		/// Valid only in non-service mode.
		/// </summary>
		Interactive
	}

	/// <summary>
	/// Base configuration.
	/// </summary>
	public interface IConfiguration
	{
		/// <summary>
		/// Directories to consider.
		/// </summary>
		List<DirectoryInfo> Directories { get; }

		/// <summary>
		/// Extensions to consider.
		/// </summary>
		List<string> Extensions { get; }

		/// <summary>
		/// Indicates whether app runs in continuous mode or not.
		/// </summary>
		bool Continuous { get; set; }

		/// <summary>
		/// Mode.
		/// </summary>
		Mode Mode { get; set; }

		/// <summary>
		/// Advanced configuration.
		/// </summary>
		IAdvancedConfiguration Advanced { get; }

		/// <summary>
		/// Scheduler due time. See <see cref="IScheduler.DueTime"/>.
		/// 0:0:0 means no scheduling.
		/// </summary>
		TimeSpan DueTime { get; set; }

		/// <summary>
		/// Scheduler working time. See <see cref="IScheduler.WorkingTime"/>.
		/// </summary>
		TimeSpan WorkingTime { get; set; }
	}
}
